{
 "cells": [
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Parameter Values\n",
    "\n",
    "In this notebook, we explain how parameter values are set for a model. Information on creating new parameter sets is provided in our [online documentation](https://docs.pybamm.org/en/latest/source/api/parameters/parameter_sets.html#adding-parameter-sets)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Setting up parameter values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Note: you may need to restart the kernel to use updated packages.\n"
     ]
    }
   ],
   "source": [
    "%pip install \"pybamm[plot,cite]\" -q    # install PyBaMM if it is not installed\n",
    "import os\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "\n",
    "import pybamm\n",
    "\n",
    "os.chdir(pybamm.__path__[0] + \"/..\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In `pybamm`, the object that sets parameter values for a model is the [`ParameterValues`](https://docs.pybamm.org/en/latest/source/api/parameters/parameter_values.html) class, which extends `dict`. This takes the values of the parameters as input, which can be either a dictionary,"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "parameter values are {'Boltzmann constant [J.K-1]': 1.380649e-23,\n",
      " 'Electron charge [C]': 1.602176634e-19,\n",
      " 'Faraday constant [C.mol-1]': 96485.33212,\n",
      " 'Ideal gas constant [J.K-1.mol-1]': 8.314462618,\n",
      " 'a': 1,\n",
      " 'b': 2,\n",
      " 'c': 3}\n"
     ]
    }
   ],
   "source": [
    "param_dict = {\"a\": 1, \"b\": 2, \"c\": 3}\n",
    "parameter_values = pybamm.ParameterValues(param_dict)\n",
    "print(f\"parameter values are {parameter_values}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "or using one of the pre-set chemistries"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Negative current collector thickness is 2.5e-05 m\n"
     ]
    }
   ],
   "source": [
    "chem_parameter_values = pybamm.ParameterValues(\"Marquis2019\")\n",
    "print(\n",
    "    \"Negative current collector thickness is {} m\".format(\n",
    "        chem_parameter_values[\"Negative current collector thickness [m]\"]\n",
    "    )\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can alter the values of parameters by updating the dictionary, by using the `update` method or by using the `[]` operator."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "parameter values are {'Boltzmann constant [J.K-1]': 1.380649e-23,\n",
      " 'Electron charge [C]': 1.602176634e-19,\n",
      " 'Faraday constant [C.mol-1]': 96485.33212,\n",
      " 'Ideal gas constant [J.K-1.mol-1]': 8.314462618,\n",
      " 'a': 2,\n",
      " 'b': 3,\n",
      " 'c': 4}\n"
     ]
    }
   ],
   "source": [
    "parameter_values[\"a\"] = 2\n",
    "parameter_values.update({\"b\": 3, \"c\": 4})\n",
    "print(f\"parameter values are {parameter_values}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Parameter values can either be numerical values, python functions or PyBaMM expressions. We can input functions into the parameter value like so (note we bypass the check that the parameter already exists):\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "parameter values are {'Boltzmann constant [J.K-1]': 1.380649e-23,\n",
      " 'Electron charge [C]': 1.602176634e-19,\n",
      " 'Faraday constant [C.mol-1]': 96485.33212,\n",
      " 'Ideal gas constant [J.K-1.mol-1]': 8.314462618,\n",
      " 'a': 2,\n",
      " 'b': 3,\n",
      " 'c': 4,\n",
      " 'cube function': <function cubed at 0x75528531c4c0>}\n"
     ]
    }
   ],
   "source": [
    "def cubed(x):\n",
    "    return x**3\n",
    "\n",
    "\n",
    "parameter_values.update({\"cube function\": cubed}, check_already_exists=False)\n",
    "print(f\"parameter values are {parameter_values}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can also use a PyBaMM expression to set the parameter value, allowing us to set parameters based on other parameters: "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "parameter_values.update({\"a\": pybamm.Parameter(\"b\") + pybamm.Parameter(\"c\")})"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Setting parameters for a PyBaMM model"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We represent parameters in models using the classes [`Parameter`](https://docs.pybamm.org/en/latest/source/api/expression_tree/parameter.html) and [`FunctionParameter`](https://docs.pybamm.org/en/latest/source/api/expression_tree/parameter.html#pybamm.FunctionParameter). These cannot be evaluated directly,"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "tags": [
     "raises-exception"
    ]
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "method self.evaluate() not implemented for symbol a of type <class 'pybamm.expression_tree.parameter.Parameter'>\n"
     ]
    }
   ],
   "source": [
    "a = pybamm.Parameter(\"a\")\n",
    "b = pybamm.Parameter(\"b\")\n",
    "c = pybamm.Parameter(\"c\")\n",
    "func = pybamm.FunctionParameter(\"cube function\", {\"a\": a})\n",
    "\n",
    "expr = a + b * c\n",
    "try:\n",
    "    expr.evaluate()\n",
    "except NotImplementedError as e:\n",
    "    print(e)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "However, the `ParameterValues` class can walk through an expression, changing an `Parameter` objects it sees to the appropriate `Scalar` and any `FunctionParameter` object to the appropriate `Function`, and the resulting expression can be evaluated"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "19.0 = 19.0\n"
     ]
    }
   ],
   "source": [
    "expr_eval = parameter_values.process_symbol(expr)\n",
    "print(f\"{expr_eval} = {expr_eval.evaluate()}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "343.0 = 343.0\n"
     ]
    }
   ],
   "source": [
    "func_eval = parameter_values.process_symbol(func)\n",
    "print(f\"{func_eval} = {func_eval.evaluate()}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "If a parameter needs to be changed often (for example, for convergence studies or parameter estimation), the `InputParameter` class should be used. This is not fixed by parameter values, and its value can be set on evaluation (or on solve):"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "with d = 3, 2.0 + d = 5.0\n",
      "with d = 5, 2.0 + d = 7.0\n"
     ]
    }
   ],
   "source": [
    "d = pybamm.InputParameter(\"d\")\n",
    "expr = 2 + d\n",
    "expr_eval = parameter_values.process_symbol(expr)\n",
    "print(\"with d = {}, {} = {}\".format(3, expr_eval, expr_eval.evaluate(inputs={\"d\": 3})))\n",
    "print(\"with d = {}, {} = {}\".format(5, expr_eval, expr_eval.evaluate(inputs={\"d\": 5})))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Solving a model"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The code below shows the entire workflow of:\n",
    "\n",
    "1. Proposing a toy model\n",
    "2. Discretising and solving it first with one set of parameters,\n",
    "3. then updating the parameters and solving again\n",
    "\n",
    "The toy model used is:\n",
    "$$\\frac{\\mathrm{d} u}{\\mathrm{d} t} = -a u$$\n",
    "\n",
    "with initial conditions $u(0) = b$. The model is first solved with $a = 3, b = 2$, then with $a = -1, b = 2$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABQkAAAGGCAYAAADYVwfrAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAACVcElEQVR4nOzdd3iTZdvH8e+ddEJJmV1QStmWvaGIog8KyBAX4quCuAcq4uR53Atw4kBxsZygKCIqCAiCssEiUGWWMjqYbWihK8n7R0oldKXQNh2/j0eOkjvXfeeMNPTqmes6T8PhcDgQERERERERERGRasvk6QBERERERERERETEs5QkFBERERERERERqeaUJBQREREREREREanmlCQUERERERERERGp5pQkFBERERERERERqeaUJBQREREREREREanmlCQUERERERERERGp5pQkFBERERERERERqeaUJBQREREREREREanmlCQUEfGwvn370rZtW0+HISIiIiLloEmTJgwePNjTYYiI5KMkoYhICbz88sv07NmTBg0a4OfnR4sWLRg7diyHDx/2dGjnzW63M2PGDIYOHUp4eDg1a9akbdu2vPjii2RkZHg6PBEREZFyN3v2bG666SZatGiBYRj07dvX0yGVmpMnTzJlyhQuv/xyQkNDqVWrFp06deL999/HZrN5OjwR8QAvTwcgIlKZbNy4kY4dOzJixAhq1arF33//zUcffcSPP/5ITEwMNWvW9HSI5+zkyZOMHj2anj17cvfddxMUFMTq1at55plnWLp0Kb/++iuGYXg6TBEREZFy8/7777Nx40a6devG0aNHPR1OqdqzZw/3338///nPfxg3bhwWi4VFixZx7733smbNGmbOnOnpEEWknClJKCJSAnPnzs13rFevXlx77bX88MMPjBgxwgNRlQ4fHx/++OMPoqOj847dcccdNGnSJC9R2K9fPw9GKCIiIlK+Pv30Uxo2bIjJZKpy5WFCQkLYsmULbdq0yTt21113ceuttzJ9+nSeeuopmjdv7sEIRaS8abuxiFR48fHx3HvvvbRq1Qp/f3/q1avHddddx969ez0dGuCsKwOQkpJyXtfZuHEj0dHR+Pv7ExkZydSpU88/uBLw8fFxSRCedtVVVwHw999/l2s8IiIiUrVV9DkeQHh4OCZT2fza/Msvv9CxY0f8/PyIiori22+/LZPnKUz9+vVdEoSnae4nUn1pJaGIVHjr169n1apVjBgxgkaNGrF3717ef/99+vbtS2xsLDVq1Cjy/OPHj7tVV6VGjRrFXgvA4XBw9OhRcnJy2LlzJ0888QRms/m8atQcP36cK664guHDh3PDDTcwZ84c7rnnHnx8fLj11luLPDc1NZXs7Oxin8PPz4+AgIASx5aUlAQ4J5IiIiIipaWizfHK086dO7n++uu5++67GTVqFNOnT+e6665j4cKFXHbZZUWeW9avW3M/kerLcDgcDk8HISJSlFOnTuHv7+9ybM2aNfTq1YtZs2Zx8803F3l+kyZNiI+PL/Z5nnnmGZ599tlixyUlJREaGpp3v1GjRrz++usMHz682HML0rdvX3777Tdef/11xo0bB0BWVhY9evQgISGBAwcO4O3tXez5xRk1ahQzZswocXyXXXYZ69atIz4+ntq1a5f4fBEREZGCVLQ5XnHatm1L/fr1Wb58+Xld53Tcc+fO5eqrrwbAarXSunVrQkJC2LRpk1vnF+dcXndWVhadOnXi1KlT7NixAy8vrSsSqU70jheRCu/MyWN2djZWq5XmzZtTu3ZtNm3aVOwE8vPPP+fUqVPFPk/Tpk3diqdu3bosXryYjIwM/vzzT7799lvS0tLcOrcwXl5e3HXXXXn3fXx8uOuuu7jnnnvYuHEjPXv2LPTc119/nePHjxf7HGFhYSWO6+WXX2bJkiW89957ShCKiIhIqapoc7zyFBYWlretF8BisTBy5EgmTZpEUlISISEhhZ5blq97zJgxxMbG8uOPPypBKFIN6V0vIhXeqVOnmDBhAtOnT+fgwYOcuQA6NTW12PN79+5dqvH4+PjkNfAYPHgw//nPf+jduzdBQUEMHjz4nK4ZFhaWrzNyy5YtAdi7d2+RScIuXbqc03MWZ/bs2Tz55JPcdttt3HPPPWXyHCIiIlJ9VZQ53rFjx8jKysq77+/vT2BgYKlcuzDNmzfHMAyXY2fO/YpKEpb23Pa0V199lY8++ogXXniBK664okyeQ0QqNiUJRaTCu//++5k+fTpjx46lV69eBAYGYhgGI0aMwG63F3v+4cOH3arbEhAQcE41+6KjowkNDeXzzz8/5yTh+Th7YluYkkx4Fy9ezMiRIxk0aFC5N1ARERGR6qGizPGuvvpql9It51qipbyUxdx2xowZPP7449x99908+eST5xuiiFRSShKKSIX3zTffMGrUKF5//fW8YxkZGW53E+7WrVuZ16vJyMhw6xPvwiQkJJCenu6ymnDHjh3Av92TC3P2xLYw7k54165dy1VXXUXXrl2ZM2eOtpqIiIhImagoc7yzS7ecS4mWktq1axcOh8NlNaG7c7/Sntt+//333H777Vx99dVMmTKl2PEiUnXpNz8RqfDMZjNn91h655133PoEFUqvbkt6ejqGYeTrEjd37lyOHz9O165d3YqnIDk5OXzwwQcujUs++OADGjRoUOx24tKsSfj3338zaNAgmjRpwoIFC/IVExcREREpLRVljldWpVuKkpCQwHfffefSuGTWrFl07NixyK3GULo1CVesWMGIESO46KKL+PzzzzGZTO69ABGpkpQkFJEKb/DgwXz66acEBgYSFRXF6tWrWbJkCfXq1XPr/NKq27Jz50769evH9ddfT+vWrTGZTGzYsIHPPvuMJk2a8OCDD7qMP/0p8N69e4u9dlhYGJMmTWLv3r20bNmS2bNnExMTw4cfflhkZ2MovYntiRMn6N+/P8ePH+fRRx/lxx9/dHm8WbNm9OrVq1SeS0RERKSizPGKsmLFClasWAE4t/mmp6fz4osvAnDRRRdx0UUX5Y01DIOLL77Yre7HLVu25LbbbmP9+vUEBwczbdo0kpOTmT59erHnltbrjo+PZ+jQoRiGwbXXXsvXX3/t8nj79u1p3759qTyXiFQOShKKSIX31ltvYTab+fzzz8nIyKB3794sWbKE/v37l2scjRo14pprruHXX39l5syZZGdnExERwZgxY/jf//6Xb0Kbnp5O8+bN3bp2nTp1mDlzJvfffz8fffQRwcHBvPvuu9xxxx1l8VIKdPToUfbv3w/AE088ke/xUaNGKUkoIiIipaaizPGK8uuvv/Lcc8+5HHvqqacA53be00nCtLQ0AEJDQ926bosWLXjnnXd49NFH2b59O5GRkcyePbtcX3tcXFxeuZz77rsv3+PPPPOMkoQi1YzhOHt9t4iInLfY2FjatGnDggULGDRokKfDEREREZEy9NNPPzF48GA2b95Mu3btPB2OiMg5UcEBEZEysGzZMnr16qUEoYiIiEg1sGzZMkaMGKEEoYhUalpJKCIiIiIiIiIiUs1pJaGIiIiIiIiIiEg1pyShiIiIiIiIiIhINackoYiI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MEApT1onWon1yPidqT6TCeaY6wPWRJgz0vlmFxERERERERE5W+x8Z+7gjAQhQAPHUab6TGZh/xQlCKsZJQkrK7sNY+ETAJiMsx90OL8sfMK5bFhERERERERE5DS7zbmC8HT+4AzOHINB3RVPK6dQzShJWFnFrwJrAvnyg3kcYD3oHCciIiIiIiIiclpuTqEwhnIK1ZKShJVVWnLpjhMRERERERGR6kE5BSmAkoSVVUBw6Y4TERERERERkWohLiPAvYHKKVQrShJWVhHRzi7GhW44NsDS0DlORERERERERAT4aUsig+fbSXDUxV7oKOUUqiMlCSsrkxkGTMq945oozCs7OmCic5yIiIiIiIiIVGt2u4M3F+/g3s83kZ7t4JsGYzAwyL/4KPe+cgrVjpKElVnUUBg+CyyhLoeTqEf6sOnOx0VERERERESkWjuZlcN9X2ziraU7AbjtwkjuvechjAJyCljCnLkG5RSqHSUJK7uooTB2K4xagP3qj3m05sv0zniLqYeiPB2ZiIiIVCMrVqxgyJAhhIWFYRgG8+bNc3nc4XDw9NNPExoair+/P/369WPnzp2eCVZERKQaOZhyimvfX83PW5PwNhu8ck17nhochZfZ5JJT4JpPnF/HblGCsJoqcZKwuAng2b799lsuu+wyGjRogMVioVevXixatMhlzLPPPothGC631q1blzS06stkhsg+mNpfx38GXoMdE9N+j+NYepanIxMREZFqIj09nQ4dOjBlypQCH3/llVd4++23mTp1KmvXrqVmzZr079+fjIyMco5URESk+tiw9xhD3/md2EQr9QN8+PKOngzvFu46KDenQLtrnV+1xbjaKnGSsLgJ4NlWrFjBZZddxk8//cTGjRu55JJLGDJkCH/++afLuDZt2pCYmJh3+/3330samgD92wTTtqGF9CwbH/y229PhiIiISDUxcOBAXnzxRa666qp8jzkcDiZPnsyTTz7JlVdeSfv27Zk1axYJCQnFfuAsIiIi5+aLtfu44aM1HE3PIirUwvdjLqRrk7qeDksqMK+SnjBw4EAGDhzo9vjJkye73H/55Zf5/vvv+eGHH+jUqdO/gXh5ERISUtJw5CyGYTDuspbcOmMDM1fv5bY+kQTV8vN0WCIiIlKNxcXFkZSURL9+/fKOBQYG0qNHD1avXs2IESM8GJ2IiEjVkplj45nvt/HV+v0AXNEuhNeu60ANnxKngKSaKfeahHa7nRMnTlC3rmv2eufOnYSFhdG0aVNuvPFG9u3bV+g1MjMzsVqtLjf51yWtgujUuDYZ2XbeW6bVhCIiIuJZSUlJAAQHB7scDw4OznvsbJrviYiIlFxi6imu/2ANX63fj2HAYwNaMeX/OitBKG4p9yTha6+9RlpaGsOHD8871qNHD2bMmMHChQt5//33iYuLo0+fPpw4caLAa0yYMIHAwMC8W3h4eIHjqivDMHj4slaAc3lxQsopD0ckIiIiUjKa74mIiBTBboO4lbDlG+dXu421e44y5J3fidmfQqC/NzNGd+fevs0xDMPT0UolUa5Jwi+++ILnnnuOOXPmEBQUlHd84MCBXHfddbRv357+/fvz008/kZKSwpw5cwq8zvjx40lNTc277d+/v7xeQqXRu3k9ukfWJctm591luzwdjoiIiFRjp0vKJCcnuxxPTk4utNyM5nsiIiKFiJ0Pk9vCzMEw9zaYOZj0SRcw85N3OJKWReuQWvww5kIubtnA05FKJVNuScKvvvqK22+/nTlz5rjUoylI7dq1admyJbt2FZzc8vX1xWKxuNzElXM1YUsA5qzfz76jJz0ckYiIiFRXkZGRhISEsHTp0rxjVquVtWvX0qtXrwLP0XxPRESkALHzYc5IsCa4HPbPSOZdrzd5sukuvr03msb1angoQKnMyiVJ+OWXXzJ69Gi+/PJLBg0aVOz4tLQ0du/eTWhoaDlEV3X1aFqPPi3qk2N38Nov2z0djoiIiFRhaWlpxMTEEBMTAziblcTExLBv3z4Mw2Ds2LG8+OKLzJ8/ny1btjBy5EjCwsIYNmyYR+MWERGpNOw2WPg44Mj3kMlwLha6Le0Danhpe7GcmxInCYuaAIJza8jIkSPzxn/xxReMHDmS119/nR49epCUlERSUhKpqal5Yx555BF+++039u7dy6pVq7jqqqswm83ccMMN5/ny5PEBrQGYvzmBrQdTixktIiIicm42bNhAp06d6NSpEwDjxo2jU6dOPP300wA89thj3H///dx5551069aNtLQ0Fi5ciJ+fnyfDFhERqTziV+VbQXgmAweG9aBznMg5KHGSsLgJYGJioktn4g8//JCcnBzuu+8+QkND824PPvhg3pgDBw5www030KpVK4YPH069evVYs2YNDRpo//z5atsw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",
      "text/plain": [
       "<Figure size 1300x400 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Create model\n",
    "model = pybamm.BaseModel()\n",
    "u = pybamm.Variable(\"u\")\n",
    "a = pybamm.Parameter(\"a\")\n",
    "b = pybamm.Parameter(\"b\")\n",
    "model.rhs = {u: -a * u}\n",
    "model.initial_conditions = {u: b}\n",
    "model.variables = {\"u\": u, \"a\": a, \"b\": b}\n",
    "\n",
    "# Set parameters, with a as an input ########################\n",
    "parameter_values = pybamm.ParameterValues({\"a\": \"[input]\", \"b\": 2})\n",
    "parameter_values.process_model(model)\n",
    "#############################################################\n",
    "\n",
    "# Discretise using default discretisation\n",
    "disc = pybamm.Discretisation()\n",
    "disc.process_model(model)\n",
    "\n",
    "# Solve\n",
    "t_eval = np.linspace(0, 2, 30)\n",
    "ode_solver = pybamm.ScipySolver()\n",
    "solution = ode_solver.solve(model, t_eval, inputs={\"a\": 3})\n",
    "\n",
    "# Post-process, so that u1 can be called at any time t (using interpolation)\n",
    "t_sol1 = solution.t\n",
    "u1 = solution[\"u\"]\n",
    "\n",
    "# Solve again with different inputs ###############################\n",
    "solution = ode_solver.solve(model, t_eval, inputs={\"a\": -1})\n",
    "t_sol2 = solution.t\n",
    "u2 = solution[\"u\"]\n",
    "###################################################################\n",
    "\n",
    "# Plot\n",
    "t_fine = np.linspace(0, t_eval[-1], 1000)\n",
    "\n",
    "fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(13, 4))\n",
    "ax1.plot(t_fine, 2 * np.exp(-3 * t_fine), t_sol1, u1(t_sol1), \"o\")\n",
    "ax1.set_xlabel(\"t\")\n",
    "ax1.legend([\"2 * exp(-3 * t)\", \"u1\"], loc=\"best\")\n",
    "ax1.set_title(\"a = 3, b = 2\")\n",
    "\n",
    "ax2.plot(t_fine, 2 * np.exp(t_fine), t_sol2, u2(t_sol2), \"o\")\n",
    "ax2.set_xlabel(\"t\")\n",
    "ax2.legend([\"2 * exp(t)\", \"u2\"], loc=\"best\")\n",
    "ax2.set_title(\"a = -1, b = 2\")\n",
    "\n",
    "\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{Variable(-0x7fabcf6f713434a8, u, children=[], domains={}): Multiplication(0x26349e0ba31c22ee, *, children=['-a', 'y[0:1]'], domains={})}"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.rhs"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Printing parameter values\n",
    "\n",
    "Since parameters objects must be processed by the `ParameterValues` class before they can be evaluated, it can be difficult to quickly check the value of a parameter that is a combination of other parameters. You can print all of the parameters (including combinations) in a model by using the `print_parameters` function."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "a: 4.0\n",
      "b: 3.0\n",
      "a + b: 7.0\n",
      "a * b: 12.0\n"
     ]
    }
   ],
   "source": [
    "a = pybamm.Parameter(\"a\")\n",
    "b = pybamm.Parameter(\"b\")\n",
    "parameter_values = pybamm.ParameterValues({\"a\": 4, \"b\": 3})\n",
    "parameters = {\"a\": a, \"b\": b, \"a + b\": a + b, \"a * b\": a * b}\n",
    "param_eval = parameter_values.print_parameters(parameters)\n",
    "for name, value in param_eval.items():\n",
    "    print(f\"{name}: {value}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "If you provide an output file to `print_parameters`, the parameters will be printed to that output file."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## References\n",
    "\n",
    "The relevant papers for this notebook are:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1] Joel A. E. Andersson, Joris Gillis, Greg Horn, James B. Rawlings, and Moritz Diehl. CasADi – A software framework for nonlinear optimization and optimal control. Mathematical Programming Computation, 11(1):1–36, 2019. doi:10.1007/s12532-018-0139-4.\n",
      "[2] Charles R. Harris, K. Jarrod Millman, Stéfan J. van der Walt, Ralf Gommers, Pauli Virtanen, David Cournapeau, Eric Wieser, Julian Taylor, Sebastian Berg, Nathaniel J. Smith, and others. Array programming with NumPy. Nature, 585(7825):357–362, 2020. doi:10.1038/s41586-020-2649-2.\n",
      "[3] Scott G. Marquis, Valentin Sulzer, Robert Timms, Colin P. Please, and S. Jon Chapman. An asymptotic derivation of a single particle model with electrolyte. Journal of The Electrochemical Society, 166(15):A3693–A3706, 2019. doi:10.1149/2.0341915jes.\n",
      "[4] Valentin Sulzer, Scott G. Marquis, Robert Timms, Martin Robinson, and S. Jon Chapman. Python Battery Mathematical Modelling (PyBaMM). Journal of Open Research Software, 9(1):14, 2021. doi:10.5334/jors.309.\n",
      "[5] Pauli Virtanen, Ralf Gommers, Travis E. Oliphant, Matt Haberland, Tyler Reddy, David Cournapeau, Evgeni Burovski, Pearu Peterson, Warren Weckesser, Jonathan Bright, and others. SciPy 1.0: fundamental algorithms for scientific computing in Python. Nature Methods, 17(3):261–272, 2020. doi:10.1038/s41592-019-0686-2.\n",
      "\n"
     ]
    }
   ],
   "source": [
    "pybamm.print_citations()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "env",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.12"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
